import {useRoute, useRouter} from "vue-router";
import axios from "axios";
import {ElMessage} from "element-plus";

// 初始化路由实例
const router = useRouter();
const route = useRoute()

// 请求根地址
const BASE_URL = '/api';

// 创建axios实例
const instance = axios.create({
    baseURL: BASE_URL,
    // 设置请求超时时间为30秒
    timeout: 30000,
});

// 请求拦截器 - 在发送请求之前做些什么
instance.interceptors.request.use(
    (config) => {
        // 可以在这里添加认证token等信息
        return config;
    },
    (error) => {
        // 处理请求错误
        ElMessage.error(error.message || '服务异常');
        return Promise.reject(error);
    }
);

// 响应拦截器 - 对响应数据做点什么
instance.interceptors.response.use(
    (response) => {
        // 👉 判断是否是文件/Blob 类型响应
        const contentType = response.headers['content-type'];
        const responseType = response.request?.responseType;

        // 如果是 blob，并且内容是图片/文件，直接返回原始 response
        if (
            (responseType === 'blob' || responseType === 'arraybuffer') &&
            contentType &&
            (contentType.includes('application/octet-stream') ||
                contentType.includes('image/') ||
                contentType.includes('application/pdf') ||
                contentType.includes('text/html')) // 可能后端错误返回 HTML 页面
        ) {
            return response; // 直接返回整个 response，不要动它
        }

        // 👉 否则按 JSON 处理
        const res = response.data;

        // 确保 res 是对象且有 code
        if (res && typeof res === 'object' && 'code' in res) {
            if (res.code === 0) {
                // 请求成功，显示成功消息并返回数据
                ElMessage.success(res.message || '操作成功');
                return res.data; // 返回业务数据
            } else {
                // 请求失败，显示错误消息并拒绝Promise
                ElMessage.error(res.message || '服务异常');
                return Promise.reject(res);
            }
        } else {
            // 如果不是标准响应格式（比如下载链接返回的 JSON）
            return response.data;
        }
    },
    async (error) => {
        // 统一处理响应错误
        const errResponseData = error.response?.data;
        ElMessage.error(errResponseData?.message || '服务异常');
        return Promise.reject(error);
    }
);

// 导出axios实例供其他模块使用
export default instance;